# -*- coding: utf-8 -*-
__author__ = 'lztkdr'
__date__ = '2020/4/14 13:44'

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# Pycharm输出窗口有省略号，数据显示不全解决方法
pd.set_option('display.max_rows', 10)
pd.set_option('display.max_columns', 200)
pd.set_option('display.width', 1000)

# 如果要显示中文标题和坐标表示，需要添加以下两行代码
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

print('pd.__version__:', pd.__version__)

print('============================================================================================================')

""""

	探究：用户对物品类别的喜好细分降维
	https://www.kaggle.com/c/instacart-market-basket-analysis/data

products.csv                 商品信息
order_products__prior.csv    订单与商品信息
orders.csv                   用户的订单信息      
aisles.csv                   商品所属具体物品类别

"""

from sklearn.decomposition import PCA

# order_products__prior.csv 订单与商品信息
prior = pd.read_csv("./instacart/order_products__prior.csv")
print('prior columns:\n', prior.columns)

# product.csv 商品信息
products = pd.read_csv("./instacart/products.csv")
print('products columns:\n', products.columns)

# order.csv 用户的订单信息
orders = pd.read_csv("./instacart/orders.csv")
print('orders columns:\n', orders.columns)

# aisles.csv 商品所属具体物品类别
aisles = pd.read_csv("./instacart/aisles.csv")
print('aisles columns:\n', aisles.columns)

# prior columns:
#  Index(['order_id', 'product_id', 'add_to_cart_order', 'reordered'], dtype='object')
# products columns:
#  Index(['product_id', 'product_name', 'aisle_id', 'department_id'], dtype='object')
# orders columns:
#  Index(['order_id', 'user_id', 'eval_set', 'order_number', 'order_dow', 'order_hour_of_day', 'days_since_prior_order'], dtype='object')
# aisles columns:
#  Index(['aisle_id', 'aisle'], dtype='object')

print("======================================================================")

# 合并四张表到一张表  （用户-物品类别）
_mg = pd.merge(prior, products, on=['product_id', 'product_id'])
_mg = pd.merge(_mg, orders, on=['order_id', 'order_id'])
mt = pd.merge(_mg, aisles, on=['aisle_id', 'aisle_id'])

### 用户、商品类别 进行分组
# 交叉表（特殊的分组工具）
df = pd.crosstab(mt['user_id'], mt['aisle'])
print(df.shape) # (206209, 134)
print(df.columns)
print("====================================")

# print(df.head())

# 进行主成分分析
pca = PCA(n_components=0.9)
data = pca.fit_transform(df)

# 主成分分析后，数据被降维(减少)
print(data.shape) # (206209, 27)
print(type(data)) # numpy.ndarray



